import { Button, Grid, Tab, Tabs, Typography } from '@mui/material'; import { Box, Container } from '@mui/system'; import { dehydrate, QueryClient } from '@tanstack/react-query'; import Image from 'next/image'; import { useRouter } from 'next/router'; import React, { useState } from 'react'; import Loader from '../../components/loader/Loader'; import ProductCard from '../../components/product-card/ProductCard'; import TabPanel from '../../components/tab-panel/TabPanel'; import { useFetchSimilarProducts, useFetchSingleProduct, } from '../../hooks/useFetchProductData'; import { getProductData } from '../../requests/products/producDataRequest'; import { useStore, useStoreUpdate } from '../../store/cart-context'; import { shuffle } from '../../utils/helpers/shuffle'; const SingleProduct = () => { const { addCartValue } = useStoreUpdate(); const { cartStorage } = useStore(); const router = useRouter(); const { customId } = router.query; const { data, isLoading } = useFetchSingleProduct(customId); const productCategory = data?.product.category; const { data: similarProducts, isLoading: similarLoading } = useFetchSimilarProducts(productCategory); const [value, setValue] = useState(0); const addProductToCart = (quantity) => addCartValue(data.product, quantity); const inCart = cartStorage?.some( (item) => item.product.customID === data?.product.customID ) ? true : false; const handleChange = (event, newValue) => { setValue(newValue); }; function a11yProps(index) { return { id: `simple-tab-${index}`, 'aria-controls': `simple-tabpanel-${index}`, }; } if (isLoading) { return ; } if (similarLoading) { return ; } const productsToShow = (id) => { const filtered = shuffle(similarProducts?.productsByCategory) .filter((product) => product.customID !== id) .slice(0, 3) .map((item) => ( )); return filtered; }; return ( {data.product.name} product {data.product.description} ${data.product.price} {data.product.category} Other Product You May Like {productsToShow(customId)} ); }; export const getServerSideProps = async (context) => { const { params } = context; const { customId } = params; const queryClient = new QueryClient(); await queryClient.prefetchQuery( ['product', customId], async () => await getProductData(customId) ); return { props: { dehydratatedState: dehydrate(queryClient), }, }; }; export default SingleProduct;